<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<style>
  /* .box1{
    width: 400px;
    height: 100px;
    background-color: pink;
  }
  .box2{
    width: 400px;
    height: auto;
    background-color: blue;
    overflow-y: scroll;
  }
  .box3{
    width: 400px;
    min-height: 30px;
    background-color: red;
  }
  .box4{
    width: 100%;
    height: 3000px;
  } */
</style>

<body>

  <!-- <div class="box1"></div>
  <div class="box2">
    <div class="box4"></div>
  </div>
  <div class="box3"></div> -->
  <script>
    // 执行顺序
    // let num = 0
    // console.log(1);
    // setTimeout(() => {
    //   num++
    // },0)
    // new Promise((resolve,reject) => {
    //   setTimeout(() => {
    //     console.log(2);
    //   }, 0);
    //   console.log(3);
    // }).then(res => {
    //   console.log(4);
    // })
    // console.log(num); //1 3 0 2 


    //数组去重
    // const nameList = [{name:10},{name:11},{name:12},{name:10},{name:11}]

    // function filterArr(arr){
    //   let n = new Set()
    //   return arr.filter(item => {
    //     const uname = JSON.stringify(item)
    //     if(n.has(uname)){
    //       return false
    //     } else {
    //       n.add(uname)
    //       return true
    //     }
    //   })
    // }
    // console.log(filterArr(nameList));

    //最快速拿到id值
    // const source = [{id:1,name:'张三'},{id:2,name:'张三1'},{id:3,name:'张三2'},{id:4,name:'张三3'}]
    //  const arr = source.map(item => item.id)
    //  console.log(arr);

    // const arr = []
    // for(const v of source){
    //   arr.push(v.id)
    // }
    // console.log(arr);

    //优化代码
    // let name = null
    // let type = prompt('请输入一个数字')
    // const obj = {
    //   1:'张三',
    //   2:'李四',
    //   3:'王五',
    //   4:'赵六'
    // }
    // name = obj[type] ?? '查无此人'
    // alert(name)


    //     let arr = [
    //       {createBy:1234,id:001,index:1,test1:'测试1',test2:'测试2'},
    //       {createBy:1234,id:001,index:1,test1:'测试1',test2:'测试2'},
    //       {id:001,index:1,test1:'测试1',test2:'测试2'},
    //       {id:001,index:1,test1:'测试1',test2:'测试2'},
    //     ]

    //   // const newArr = arr.reduce((prev,item) => {
    //   //     const {createBy,id,index,...rest} = item
    //   //     const obj = !createBy ? {...rest} : item
    //   //     prev.push(obj)
    //   //     return prev
    //   //   },[])
    //   //   console.log(newArr);
    //  const newArr = arr.map(item => {
    //     // console.log(Object.keys(item));
    //     return Object.keys(item).includes('createBy') ? item : {test1:item.test1,test2:item.test2}
    //   })
    //   console.log(newArr);
    // const Person = function(){
    //   return true
    // }

    // let n = new Person()
    // console.log(n);
    function test (v) {
      return new Promise((resolve, reject) => {
        setTimeout(() => {
          resolve(v)
        }, 2000);
      })
    }

    class Test {
      constructor() {
        this.max = 10
        this.list = []
        setTimeout(() => {
          this.run()
        }, 1000);
      }

      add (v) {
        this.list.push(v)
      }

      run () {
        const length = this.list.length
        if (!length) return
        // debugger
        const min = Math.min(this.max, length)
        for (let i = 0; i < min; i++) {
          const p = this.list.shift()
          p.then(res => {
            console.log('[ res ] >', res)
            console.log('[ this.list ] >', this.list)
          })
        }
      }
    }

    const testFn = new Test()
    for (let i = 0; i < 20; i++) {
      const n = test(i)
      testFn.add(n)
    }

    // const arr = [3, 4, 5, 6, 7, 8, 34, 3456789, 8, 9, 7]
    // const obj = RegExp(/3/)
    // const newArr = arr.filter(item => {
    //   if ((item) % 3 === 0 || obj.test(item)) {
    //     return item
    //   }
    // })
    // console.log('[ newArr ] >', newArr.join(','))

  //   const num = prompt('请输入一个数字')
  //   const obj1 = RegExp(/3/)
  //   const arr = []
  //   for(let i = 0; i<=num;i++){
  //     if(i % 3 === 0 && i !== 0 || obj1.test(i)){
  //       arr.push(i)
  //     }
  //   }
  //  console.log('[ getNum(arr) ] >', getNum(arr))
  //   function getNum(v){
  //     const obj = RegExp(/3/)
  //     if(v instanceof Array){
  //       const newV = v.filter(item => {
  //         if(item % 3 === 0 || obj.test(item)){
  //           return item
  //         }
  //       })
  //       return newV.join(' ')
  //     } else {
  //       if(v % 3 === 0 || obj.test(v)){
  //         return v
  //       }else {
  //         return '这个数和我的条件不匹配'
  //       }
  //     }
  //   }
  </script>
</body>

</html>